Prepare For AWD

CTF线下AWD攻防赛的准备

参加的CTF线下赛不多,看了很多网上的文章,决定写一篇自己的AWD准备的文章。本人web狗,只在总结了AWD中web的套路,二进制目前还没有接触orz

0x01 修改ssh密码

很多比赛主办方给出的ssh密码是默认的,或者密码是随机的长串字母数字,首先应该修改ssh密码,改成队伍所以人都知道,注意不要用弱密码。
其次不多见的是主办方给了ssh弱密码,就是所有队伍的ssh密码都是一样的,这时候手速一定要快,防止密码被别人人修改,那还没登陆就gg了,如果可能脚本修改其他队伍的密码,做一些不可描述的事情hhh。

准备change_ssh脚本

0x02 dump源码

一般比赛是不会给出源码的,需要从自己的服务器dump下来。速度一定要快。修改完ssh密码接着就dump源码。注意dump源码一定要在上waf、文件监控执行,保留最初始的源码。有助于审计和恢复源码。方法有两种:

1、利用图形化软件XFTP或者FileZilla Client直接下载源码。
2、利用命令:

scp -r -P Port remote_username@\remote_ip:remote_folder local_file
命令不好用,自我感觉还是用图形化软件吧。

3、备份web目录:

tar -zcvf web.tar.gz /var/www/html/

0x02 备份数据库

1、找数据库配置文件,找到db_name、db_user和db_passwd
2、登陆数据库,命令备份数据库:

mysqldump -u db_user -p db_passwd db_name > bak.sql//备份指定数据库
cd /var/lib/mysql
mysqldump -u db_user -p db_passwd > bak.sql//先进入数据库目录再备份
mysqldump --all-databases > bak.sql //备份所有数据库

3、还原数据库:

mysql -u db_user -p db_passwd db_name < bak.sql //还原指定数据库
cd /var/lib/mysql
mysql -u db_user db_passwd < bak.sql //先进入数据库目录再还原
还有一种方法:
mysql -u db_name -p
input passwd 进入mysql控制台mysql>
mysql> show databases;看看有哪些数据库
mysql> create database test ; 建立要还原的数据库
mysql> use test;切换到刚创建的数据库
mysql> source test.sql; 导入数据库

ps:如果是数据库弱密码的话,尝试能不能登陆数据库改密码、写shell、或者删库。
准备 AWD_weaksql脚本、修改密码脚本、删库脚本

0x03 上waf

waf能不能上要看主办方的check机制,一定要小心,特别容易checkdown,导致失分。
准备 waf.php

0x04 上流量监控脚本

流量监控脚本要让入口文件或所有文件包含
require_once('monitor.php');
find /var/www/html -type f -path "*.php" | xargs sed -i "s/<?php/<?php\n require_once('\/tem\/waf.php');\n/g"
准备 monitor.php

0x05 D盾木马查杀

把dump下来的源码扔进D盾查杀。发现后门先清理自己的服务器,能修改则修改不能修改则注释掉。

经常出现一些难以发现的后门,即使盾扫出来,也不会利用的,如上次蓝帽杯初赛的weekly后门,还有代码执行的后门。

ps:需要总结常见的变形后门。

0x06 代码审计

一般利用seay源代码审计工具,虽然没什么用,大致有个审计的方向。
几点思路:

  1. 比赛可能是一些主流的cms,查找cms,如果有外网可以直接搜cms,看最近爆出的漏洞和下载最新版本的cms,直接覆盖安装,可以修复很多漏洞。
  2. 白盒审计结合黑盒测试,要注意网站后台是否是弱密码,或者容易爆破,如果是弱密码,可以先改一波其他队伍的,再测试是否有漏洞,特别是在模板更新、资料修改的地方。
  3. 常见的漏洞有:
    sql注入
    文件上传
    文件包含
    命令执行
    代码执行

    最常见的就是各种rce,要巧妙利用。
  4. 可能水平有限,根本审不出什么漏洞,要时刻注意文件监控脚本,看被打的流量,及时补洞。种植后门一般是批量,所以后门的路径和密码都是一样的,所以也可以利用被人种下的后门攻击一波。注意监控到的流量一般包含很多混淆流量,不容易看。
    上次蓝帽初赛并没有抓到有用的被打流量,这个还是得好好测试下。

防御

1. waf慎重。

2. 多留意有没有被种下后门或者不死马之类的,多备份几次源码,用D盾扫,很容易扫到其他队伍的后门。

克制不死马的方法:脚本、命令、骚套路

3. 修改数据库、后台、ssh密码之类的前边提到了,不再累述。

4. 权限加固,如upload文件夹的权限设置为644,再尝试修改所有可写目录,这里要注意防止checkdown,一些shell命令:

  • 查找命令find
1
2
3
4
5
6
7
8
:: 全盘查找可写目录(可写文件 -type f)
$ find / -type d -writable 2>/dev/null | grep -v -P '(^/proc)|(^/dev)' | more -500

:: 将当前目录下的所有可写目录修改成不可写(该操作请慎重执行,可写文件 -type f)
$ find . -type d -writable | xargs chmod 644

:: 打印ctf用户拥有的所有文件
$ find / -type f -user ctf -print 2>/dev/null | grep -v -P '(^/proc)|(^/dev)'
  • 设置权限命令chmod
1
2
3
4
5
6
7
8
9
10
11
:: 完整命令
$ chmod u=rwx g=rw o=r filename

:: 所有权限类别增加可执行权限
$ chmod a+x filename

:: 将当前目录下所有文件和子目录的用户组可写权限删除
$ chmod g-w . -R

:: 配置rw-r--r--权限
$ chmod 644 filename
  • 设置所有权命令chown
1
2
:: 将当前目录下所有文件和子目录的拥有者和所属用户组修改为user和group,该命令一般需要root权限
# chown user:group . -R
  • 设置不可修改命令chattr

在常见的Linux扩展文件系统中(如ext2/ext3/ext4等),可以借助某种文件属性将文件设置为不可修改(immutable)。一旦设置,任何用户(包括超级用户)都不能删除修改该文件,除非其不可修改的属性被移除。

1
2
3
4
5
6
7
:: 设置不可修改
# chattr +i file
# chattr +i -R directory

:: 恢复可修改
# chattr -i file
# chattr -i -R directory

5. 文件监控 除了监控脚本外,还有一些命令:

  • 访问监控
1
2
:: 打印全盘最近5分钟内访问过的所有文件
$ find / -type f -amin -5 -print
  • 修改监控
1
2
:: 每5分钟监视全盘最近5分钟内修改过的所有文件
$ watch -d -n 300 find / -type f -mmin -5 -print
  • 新增监视
1
2
:: 每5分钟监视全盘最近5分钟内新增的所有文件
$ watch -d -n 300 find / -type f -mmin -5 -print
  • 变化监视
1
2
3
4
5
6
:: 最终神器
:: 每1分钟监视指定目录最近5分钟内修改(mmin)、新增(cmin)的所有目录和文件,并将变化的部分突出
$ watch -d -n 60 'find /var/www/html \( -mmin -5 -or -cmin -5 \) -print 2>/dev/null'

:: 每1分钟监视指定目录最近5分钟内访问(amin)的所有目录和文件,并将变化的部分突出
$ watch -d -n 60 'find /var/www/html -amin -5 -print 2>/dev/null'

6. 进程监控

1
2
:: 每1分钟监视进程新增情况(未测试)
$ watch -d -n 60 find /proc -type f -cmin -5 -print 2>/dev/null
1
2
3
4
5
:: 显示所有当前进程
$ ps -aux
:: 查看www-data启动的进程
$ ps -u www-data
$ ps -aux | grep www-data
1
2
3
4
5
6
:: 应确保在杀死父进程前,先杀死其所有子进程
$ kill -pid <pid>
:: 给父进程发送TERM信号,试图杀死它和它的子进程
$ kill -TERM <ppid>
:: 迫使进程在运行时突然终止,不推荐使用,除非其他办法都无效
$ kill -9 <pid>

蛇皮修复法

总结check方式发现check每5分钟只会请求一次index.php和admin.php(因为这里抓到了流量)
且均为get方式,无参数访问。
这意味着check可能只通过判断状态响应头是否为200,或者是否当前页面有某些关键信息,来判断主机存活。于是我很蛇皮的ctrl+s保存了index.php和admin.php的前端。然后删光了web2所有文件,将两个纯静态html+静态文件夹上传到服务器。。。
然后就很舒服的过了check,并且永远没有再被攻击……XD
真的服了这个check机制了~

7.最重要的还是审计!审计!审计!!所以努力吧,少年!!

攻击

1、熟悉常见漏洞的基础上审计,然后利用审计出来的漏洞,编写自动化脚本,脚本需要提前准备,比赛时来不及手动orz

注入、文件上传、文件包含、命令执行以及以预留后门利用的脚本
利用shell get flag 的脚本
自动提交flag的脚本

2、上传各种木马

不死马
MD5马
内存马
各种变态马

3、攻击的时候注意打混淆流量

同样在看被打的流量时要注意识别混淆流量

AWD生存的前置技能

个人觉得要想在AWD中生存,以下技能是必需的:

1、熟知常见漏洞的原理

2、通过代码审计识别漏洞,审计cms的能力,审计php能力。

3、漏洞利用能力。

4、python脚本编写能力。

5、linux运维命令。

6、一句话木马的原理、利用和防御能力。

7、linux vim编辑器的使用。

8、良好的心理素质、快速的反应能力。

-------------本文结束有错指正哦!-------------